/**
 * Created by linyh on 2017/2/13 0013.
 */
var listCore = {
    data: function () {
        return {
            // 列表自定义参数，该数组修改一般代表需要整个列表重载
            params: {},
            // 列表专用参数，无需覆盖修改
            listStatus: {},
            defaultStatus : {},
            // 当前列表与ajax请求你返回的结果
            list: [],
            //列表在data的位置
            whichList:'list',
            breviary: {
                total: null,
                offset: null,
                pageSize: null,
                count: null,
            },
            // 是否还有更多没加载
            ifMore: true,
            // 是否正在加载中
            ifLoading: false,

            // 是否在刚开始和params改变时自动重载
            autoLoad: true,

            //  ajax请求函数
            request: function(params, status) {
                return [];
            },
            // 列表页面加载类型 page 或者 offset
            requestType: 'page',
            isFirstLoad:false,
        };
    },

    methods: {
        loadNextPage: function () {
            // 如果没有了，就不继续加载
            if(!this.ifMore) {
                return;
            }
            if(this.isFirstLoad&&!this.ifLoading){
                this.listStatus.page++;
            }else{
                this.isFirstLoad = true;
            }
            if(!this.autoLoad) {
                this.load(false);
            }
        },
        loadNext: function (size) {
            // 如果没有了，就不继续加载
            if(!this.ifMore) {
                return;
            }

            if(!size) {
                throw Error('loadNext未传递需要加载多少内容')
            }
            this.listStatus.pageSize = size;
            this.listStatus.offset += size;
            if(!this.autoLoad) {
                this.load(false);
            }
        },
        // 加载信息，参数为当前是否为重载
        load: function (ifReload) {
            ifReload = ifReload || false;
            var _self=this;

            // 如果正在加载，就不继续加载
            if(_self.ifLoading) {
                return;
            }
            // 保存list
            if(ifReload) {
                _self.list = [];
                _self.ifMore = true;
            }

            _self.ifLoading = true;
            this.request($.extend({}, this.params), $.extend({}, this.listStatus)).then(function (data) {
                // 保存list
                _self.list = _self.list.concat(data[_self.whichList]);

                // if(!!_self.status){
                //     _self.status.same=null;
                // }
                // 保存其他额外参数
                _self.breviary = data;
                if(_self.breviary.total && _self.breviary.total <= _self.list.length ||
                    _self.breviary.pageSize && _self.breviary.count < _self.breviary.pageSize) {
                    // 如果总数小于等于已加载的，或者本次加载小于需要加载的数量，说明加载完成
                    _self.ifMore = false;
                }
                _self.ifLoading = false;
            }).catch(function(){
                _self.ifLoading = false;
            });
        },
    },
    watch: {
        params: {
            handler: function(oldVal, newVal) {
                // console.log(oldVal, newVal)
                this.listStatus = $.extend({}, this.defaultStatus);
                if(this.autoLoad) {
                    this.load(true);
                }
            },
            deep: true
        },
        listStatus: {
            handler: function(oldVal, newVal) {
                // console.log(oldVal, newVal)
                if(this.autoLoad) {
                    this.load(false);
                }
            },
            deep: true
        },
    },
    mounted: function () {
        if(this.requestType == 'page') {
            this.listStatus = {
                page: 0,
                pageSize: null,
            };
        } else if(this.requestType == 'offset') {
            this.listStatus = {
                offset: 0,
                pageSize: null,
            };
        }
        this.defaultStatus = $.extend({}, this.listStatus);
        if(this.autoLoad) {
            this.load(true);
        }
    }
};

module.exports = listCore;
